Служба синхронизации времени¶
Служба синхронизации времени в домене необходима для корректной работы следующих ключевых механизмов в домене:
аутентификации по протоколу Kerberos;
двухфакторной аутентификации на основе синхронизированных по времени одноразовых паролей;
разрешения конфликтов при репликации;
возможности сопоставления журналов событий с разных серверов.
Служба chrony (демон chronyd) запускается после загрузки операционной системы и начинает отправлять запросы на NTP-серверы, указанные в файле конфигурации /etc/chrony/chrony.conf. После получения ответа от NTP-серверов, служба chrony выбирает по внутреннему алгоритму надежные (доверенные) источники времени, а затем на основании параметров из файла конфигурации из надежных источников выбирает тот, с которым будет проводиться синхронизация времени данного клиента. После выбора источника служба chrony обновляет системное время.
Функционирование подсистемы NTP в домене под управлением ALD Pro осуществляется с помощью динамических DNS-записей и групповой политики для синхронизации времени. В данном разделе рассмотрим работу групповой политики, а в следующем разделе остановимся подробнее на динамических DNS-записях.
В ALD Pro за обновление файла конфигурации службы chrony отвечает коробочная групповая политика, которая находится по пути /srv/aldpro-salt/roots/states/policies/host-policies/rbta_ldap_date_time_h. В данной политике для выбора источника точного времени предусмотрен параметр stratumweight, который установлен в значение 1, что означает максимальный приоритет надежному источнику (или источникам) точного времени с минимальным значением этого параметра. Также для ускорения процедуры первичной синхронизации времени клиента при запуске службы или при восстановлении потерянной на время связи с выбранным источником групповая политика прописывает для каждого сервера или пула NTP-серверов параметр iburst. Данный параметр отвечает за настройку службы chrony, которая заставляет клиента службы сразу после запуска отправлять серию из первых четырех NTP-пакетов с коротким интервалом в 2 секунды. Это позволяет демону быстрее собрать достаточно данных для точного измерения задержки сети и для возможности немедленной корректировки времени. Дополнительно групповой политикой задается параметр makestep для возможности быстрой коррекции времени при большой разнице во времени текущего клиента и выбранного сервера.
После первичной синхронизации времени между клиентом и выбранным NTP-сервером процесс синхронизации времени с сервером продолжается на протяжении всего времени работы службы chrony на всех компьютерах в домене. Обычно вмешательства в работу данного механизма, который минимизирует ошибки времени на клиенте и обеспечивает точность работы системных часов, не требуется. Согласно внутреннему алгоритму службы chrony, в случае небольших отклонений между показателями часов текущего клиента и выбранного NTP-сервера, процесс периодических опросов с помощью NTP-пакетов, будет проходить все реже до достижения значения, определяемого параметром maxpoll. В групповой политике из состава ALD Pro этот параметр не задается, следовательно служба chrony использует те значения по умолчанию, которые у нее есть. Значение по умолчанию для параметра minpoll - 6. Оно означает, что минимальный интервал синхронизации времени с выбранным источником будет равен 64 секунды (т.е 2 в шестой степени секунд). Значение по умолчанию для параметра maxpoll - 10. Оно означает, что максимальный интервал синхронизации времени с выбранным источником будет равен 1024 секунды (т.е 2 в десятой степени секунд). В зависимости от различных обстоятельств, например, в зависимости от текущей разницы времени между клиентом и выбранным сервером, или от стабильности времени задержки между посылкой NTP-запроса и ответом на него, служба chrony может варьировать время периодического запроса к NTP-серверу. Текущее значение параметра можно посмотреть с помощью команды chronyc sources. В результатах вывода в колонке Poll в строке с выбранным NTP-сервером будет текущее значение, которое является степенью двойки количества секунд между опросами этого источника времени.
Выбор источника точного времени (в реализации «коробочной» групповой политики) в домене для каждого компьютера осуществляется на основе иерархической системы:
Приоритет в иерархии источников (по значению параметра minstratum) |
Тип контроллера домена |
Описание |
Примечание |
|
|---|---|---|---|---|
1 |
Высший |
Внешний источник (или другой эталон) |
NTP-сервер, который находится за пределами инфраструктуры компании |
Данные источники вносятся в конфигурацию службы chrony с помощью коробочной групповой политики только для тех контроллеров домена, которые выступают в роли корневых NTP-серверов в домене ALD Pro. |
2 |
Высокий |
Корневой КД сайта |
Контроллер домена, который объявлен корневым через портал управления ALD Pro и находится в том же сайте, что и клиент, который осуществляет синхронизацию времени |
Данные источники будут являться приоритетными для всех клиентов и обычных контроллеров домена в этом сайте (принадлежность к сайту определяется настройками на портале управления ALD Pro и работой службы DNS при выполнении запросов) |
3 |
Средний |
Корневой КД домена (не из сайта) |
Контроллер домена, который объявлен корневым через портал управления ALD Pro, но находится в другом сайте относительно клиента в домене. |
Данные источники прописаны в конфигурации обычных контроллеров домена (некорневых NTP-серверов) и обычных клиентов домена (любые компьютеры, которые не являются NTP-серверами в домене) и они выбираются в том случае, когда нет корневых NTP-серверов из сайта клиента. |
4 |
Низкий |
Обычный КД сайта |
Контроллер домена, который синхронизирует время с корневым NTP-сервером и дополнительно выступает в качестве источника времени для клиентов из того же сайта |
Данные источники прописаны в конфигурации обычных контроллеров домена (некорневых NTP-серверов) и обычных клиентов домена (любые компьютеры, которые не являются NTP-серверами в домене). В связи с наличием опции orphan, такой КД может выступать в качестве источника точного времени для других КД этого сайта и для клиентов домена в этом сайте в случае отсутствия связи с корневыми NTP-серверами в домене |
5 |
Минимальный |
Обычный КД домена (не из сайта) |
Контроллер домена, который синхронизирует время с корневым NTP-сервером или с другим контроллером домена из сайта этого контроллера, но при этом находится в другом сайте относительно клиента |
Данные источники прописаны в конфигурации клиентов домена (любые компьютеры, которые не являются NTP-серверами в домене). Такой КД может выступать в качестве источника точного времени для клиентов домена в том случае, если у клиента нет связи ни с корневыми NTP-серверами, ни с КД из «своего» сайта |
При реализации иерархической системы NTP-серверов, которая настраивается в конфигурации службы chrony с помощью коробочной групповой политики (условно будет называться timeGP), необходимо учесть следующую информацию:
уровень внешнего источника используется только для корневых контроллеров домена (КД);
если для конкретного клиента
chronyвозникает ситуация, что источника на каком-то уровне нет, то берется следующий за ним уровень и осуществляется попытка синхронизации с источником этого уровня.
При установке ALD Pro первый КД в домене автоматически становится корневым NTP-сервером домена. Дальнейшие изменения конфигурации администратор делает самостоятельно с помощью портала управления ALD Pro или с помощью API ALD Pro. Другие способы внесения изменений в конфигурацию службы NTP в домене являются крайне опасными и могут привести к неработоспособности либо всего домена, либо части клиентов.
При необходимости внесения изменений в конфигурацию коробочной групповой политики timeGP рекомендуется пользоваться следующими параметрами в групповых политиках ALD Pro:
для внесения общих изменений в конфигурацию службы
chronyрекомендуется использовать параметр Настройки сервиса сетевого времени Chrony, который находится по пути Параметры компьютеров → Система → Дата и время. В случае использования данного параметра для определенных клиентов в домене администратор должен детально понимать работу службыchronyпри сделанных изменениях в конфигурации на тех компьютерах, для которых выполняется изменение конфигурации службы. В случае, если групповая политика с включенным параметром будет снята с компьютеров (то есть возникнет ситуация, когда данный параметр больше не назначается на компьютер), то на таком компьютере начнет применяться стандартная политикаtimeGP;для внесения изменений в конфигурацию службы
chronyв части используемых для синхронизации времени NTP-серверов (пулов) рекомендуется использовать параметр Параметры сервера или пула сетевого времени, который также находится по пути Параметры компьютеров → Система → Дата и время. Однако при внесении таких изменений в конфигурации службы chrony на определенных компьютерах домена также необходимо понимать все возможные нюансы работы.
По умолчанию на всех корневых КД домена должна быть следующая конфигурация службы chrony (после применения групповой политики - timeGP):
allow 0/0
stratumweight 1
combinelimit 0
local stratum 11 orphan
pool external_ntp_pool iburst minstratum 11
server external_ntp_server iburst minstratum 11 # при наличии записи (записей) в ПУ
Строки, начинающиеся с pool или server будут в файле конфигурации службы только в том случае, когда на портале управления ALD Pro указаны внешние NTP-пулы или NTP-серверы соответственно. Вместо строки external_ntp_pool в файл конфигурации будет подставляться значение внешнего NTP-пула (или несколько значений), заданное в портале управления. Вместо строки external_ntp_server в файл конфигурации с помощью timeGP попадет значение внешнего NTP-сервера, заданного через портал управления (или несколько серверов). Порядок строк имеет значение. Служба chrony будет выбирать первый в списке источник с минимальным значением параметра minstratum (в данном случае все внешние источники будут со значением 11, все будут равноранговыми), который она по своему внутреннему алгоритму посчитает доверенным и надежным. В случае NTP-пула будет выбран один из серверов внутри этого пула.
Если в портале управления ALD Pro в подразделе Роли и службы сайта → Служба синхронизации времени на вкладке Внешний пул NTP-серверов не заданы никакие NTP-серверы или NTP-пулы, то в этом случае будет использоваться директива orphan и текущий корневой NTP-сервер в домене ALD Pro станет самостоятельным источником точного времени для других NTP-серверов и клиентов домена.
По умолчанию на всех КД, которые не являются корневыми, должна быть следующая конфигурация службы chrony (после применения групповой политики - timeGP):
allow 0/0
stratumweight 1
combinelimit 0
local stratum 14 orphan
pool _ntp._udp._roots.{domain} iburst minstratum 12
pool _ntp._udp._roots._default.{domain} iburst minstratum 13
pool _ntp._udp.{domain} iburst minstratum 14
В данном случае при такой конфигурации обычного КД обеспечивается схема работы, описанная выше. В случае наличия корневого NTP-сервера в «своем» сайте синхронизация времени происходит с одним из таких серверов. Если таких NTP-серверов нет, то проверяются корневые NTP-серверы домена (вне «своего» сайта). Если их не обнаружено, то в связи с тем, что для каждого некорневого КД добавлена директива local stratum 14 orphan, в результате отрабатывает алгоритм chrony, позволяющий выбрать источник точного времени среди всех таких КД из одного сайта в соответствии с их параметром RefID (который в этом случае формируется из IP-адреса). В результате КД сайта с минимальным значением IP-адреса станет самостоятельным источником точного времени и таким NTP-сервером, к которому подключатся другие КД этого сайта.
По умолчанию на всех клиентах домена должна быть следующая конфигурация службы chrony (после применения групповой политики - timeGP):
stratumweight 1
combinelimit 0
local
pool _ntp._udp._roots.{domain} iburst minstratum 12
pool _ntp._udp._roots._default.{domain} iburst minstratum 13
pool _ntp._udp.{domain} iburst minstratum 14
pool _ntp._udp._default.{domain} iburst minstratum 15
Согласно данной конфигурации реализуется иерархическая система NTP-серверов в домене, описанная выше. На уровне обычного клиента домена не может быть внешних NTP-серверов, если администратор явно не задал такое поведение с помощью параметра групповых политик Параметры сервера или пула сетевого времени, который находится по пути Параметры компьютеров → Система → Дата и время.
Форсировать обновление настроек службы chrony (и в случае наличия изменений произойдет перезапись файла файла конфигурации службы /etc/chrony/chrony.conf и перезапуск самой службы) можно следующей командой:
.. code-block:: bash
aldpro-salt-call state.apply policies.host-policies.rbta_ldap_date_time_h
Динамические DNS-записи¶
Начиная с 2.5.0, реализован функционал подсистемы NTP, который выполняет корректировку DNS-записей в базе данных:
при добавлении и удалении контроллеров в домен;
при изменении привязки контроллеров к сайтам;
при изменении параметров корневых NTP-серверов (добавлении и удалении их через портал управления).
Поддерживает выполнение следующих действий:
Добавление двух динамических записей типа CNAME для корневых и простых контроллеров в рамках сайтов (
locations):_ntp._udp._roots.ald.company.lanведет на_ntp._udp._roots.{this_location}._locations.ald.company.lan, где:{this_location}- конкретныйlocationтого DNS-сервера, который обрабатывает запрос;_ntp._udp.ald.company.lanведет на_ntp._udp.{this_location}._locations.ald.company.lan.
Создание двух множеств DNS-записей типа A в рамках сайта (
location):_ntp._udp._roots.{some_location}._locations.ald.company.lan- пул A-записей с корневыми NTP-серверами в текущей локации;_ntp._udp.{some_location}._locations.ald.company.lan- пул обычных контроллеров домена в текущей локации (может включать все контроллеры домена, если все КД находятся водном location).
Создание двух множеств DNS-записей типа А в рамках домена:
_ntp._udp._roots._default.ald.company.lan- пул всех корневых NTP-серверов домена (CNAME), в том числе и тех, у которых признакlocationне заполнен;_ntp._udp._default.ald.company.lan- пул контроллеров домена (не CNAME), в том числе и тех, у которых признакlocationне заполнен.
Алгоритм автоматической настройки подсистемы NTP¶
Начиная с версии 2.5.0, на КД устанавливается служба aldpro-ntp-management, которая раз в 2 минуты запускает проверку healthcheck NTP. Демон NTP получает данные из LDAP-каталога о записях сайтов, о внешних и корневых NTP-серверах домена, данные всех активных КД (по умолчанию в конфигурационном файле chrony прописана строка «allow 0/0», что позволяем им выступать в качестве NTP-сервера) и данные о DNS-записях. Демон проводит расчет того, как должны выглядеть dns-записи, исходя из всех полученных из LDAP-каталога данных, и сверяет это рассчитанное состояние с тем, которое хранится в каталоге. Если все совпадает, то никаких изменений демон не производит, после чего демон засыпает на 2 минуты, затем процедура повторяется.
Внимание
Демон NTP aldpro-ntp-management устанавливается на каждый КД из состава домена, при этом должен функционировать (находиться в статусе active(running)) только на одном КД домена. Для проверки необходимо на каждом КД выполнить команду:
systemctl is-active aldpro-ntp-management
На всех КД, кроме одного, этот демон должен иметь состояние inactive.
Все запросы к LDAP-каталогу этот демон делает под системной учетной записью.
Все действия демона записываются в журнал службы journalctl, который можно просмотреть командой:
journalctl -u aldpro-ntp-management # для просмотра полного лога службы
journalctl -fu aldpro-ntp-management # для потокового просмотра лога службы
При добавлении любого КД в домен, в сайт, в состав которого вошел этот КД, добавляются записи в ветку службы dns по следующим путям:
idnsname=_ntp._udp._default,idnsname={DOMAIN_NAME}.,cn=dns,dc=* добавляется атрибут aRecord=IP_ADDRESS_DC
idnsname=_ntp._udp.hq._locations,idnsname={DOMAIN_NAME}.,cn=dns,dc=* при добавлении этого КД в сайт hq также добавляется атрибут aRecord=IP_ADDRESS_DC
При добавлении внешнего NTP-сервера с наименованием server1, в ветку LDAP-каталога cn=ntp,cn=services,cn=aldpro,cn=etc,dc* добавляется запись ntpserver=server1 с атрибутами:
externalntpservertype=server # для пула будет значение pool
isexternal=true
ntpserver=server1
В дальнейшем из этой ветки берутся данные при заполнении конфигурации службы chronyd на всех компьютерах домена с помощью групповой политики времени (см. ниже).
При добавлении нового корневого NTP-сервера домена, т.е. при смене статуса КД с «обычного» на «корневой», его запись (aRecord с IP-адресом этого КД) перемещается и располагается между записями в ветке службы DNS:
из записи сайта для «обычных» КД в запись сайта для «корневых» КД по пути
idnsname=_ntp._udp._roots.hq._locations,idnsname={DOMAIN_NAME}.,cn=dns,dc=*;добавляется
aRecord=IP-ADDR_DCв записьidnsname=_ntp._udp._roots._default,idnsname={DOMAIN_NAME}.,cn=dns,dc=*.
Помимо этого, в LDAP-каталог в ветку cn=ntp,cn=services,cn=aldpro,cn=etc,dc* добавляется запись ntpserver=FQDN_DC, где FQDN_DC - fqdn добавленного корневого NTP-сервера домена. Эта запись содержит атрибут isexternal=FALSE и атрибут server=FQDN_DC.
При удалении корневого NTP-сервера домена происходит процесс, обратный сценарию добавления нового корневого NTP-сервера.
Коробочная групповая политика времени вносит в конфигурацию службы chrony на корневых NTP-серверах домена, обычных КД и клиентов домена необходимую информацию как о наборе параметров самой службы, так и о пулах в конфигурации по умолчанию. Конфигурации для корневых NTP-серверов, обычных NTP-серверов и клиентов в домене приведены в разделе Служба синхронизации времени.
При этом для корневых NTP-серверов заменяются значения external_ntp_pool на значения атрибутов ntpserver тех записей из ветки cn=ntp,cn=services,cn=aldpro,cn=etc,dc*, у которых атрибут externalntpservertype=pool (количество таких строк будет равно количеству записей) и значения external_ntp_server на значения атрибутов ntpserver тех записей из ветки cn=ntp,cn=services,cn=aldpro,cn=etc,dc*, у которых атрибут externalntpservertype=server по такой же схеме.
При удалении КД из домена из каталога удаляются все атрибуты aRecord с IP-адресом этого КД. При удалении внешних NTP-серверов или пулов происходит удаление соответствующей записи cn=ntpserver=DELETED_ITEM в ветке cn=ntp,cn=services,cn=aldpro,cn=etc,dc*. И после срабатывания коробочной групповой политики времени (в том числе после перезагрузки корневого КД домена) на всех корневых КД домена эти записи с удаленным сервером/пулом пропадают из конфигурационного файла службы chrony, расположенного по пути /etc/chrony/chrony.conf.